﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;

// 기본 페이지 항목 템플릿에 대한 설명은 http://go.microsoft.com/fwlink/?LinkId=234237에 나와 있습니다.

namespace Hoons_Player.Lim
{
	/// <summary>
	/// 대부분의 응용 프로그램에 공통되는 특성을 제공하는 기본 페이지입니다.
	/// </summary>
	public sealed partial class MainPage : Hoons_Player.Common.LayoutAwarePage
	{
        StorageFile file;

		public MainPage()
		{
			this.InitializeComponent();
            MediaControl.PlayPressed += MediaControl_PlayPressed;
            MediaControl.PausePressed += MediaControl_PausePressed;
            MediaControl.PlayPauseTogglePressed += MediaControl_PlayPauseTogglePressed;
            MediaControl.StopPressed += MediaControl_StopPressed;
		}

		/// <summary>
		/// 탐색 중 전달된 콘텐츠로 페이지를 채웁니다. 이전 세션의 페이지를
		/// 다시 만들 때 저장된 상태도 제공됩니다.
		/// </summary>
		/// <param name="navigationParameter">이 페이지가 처음 요청될 때
		/// <see cref="Frame.Navigate(Type, Object)"/>에 전달된 매개 변수 값입니다.
		/// </param>
		/// <param name="pageState">이전 세션 동안 이 페이지에 유지된
		/// 사전 상태입니다. 페이지를 처음 방문할 때는 이 값이 null입니다.</param>
		protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
		{
		}

		/// <summary>
		/// 응용 프로그램이 일시 중지되거나 탐색 캐시에서 페이지가 삭제된 경우
		/// 이 페이지와 관련된 상태를 유지합니다. 값은
		/// <see cref="SuspensionManager.SessionState"/>의 serialization 요구 사항을 만족해야 합니다.
		/// </summary>
		/// <param name="pageState">serializable 상태로 채워질 빈 사전입니다.</param>
		protected override void SaveState(Dictionary<String, Object> pageState)
		{
		}

        async void OpenButton_Click(object sender, RoutedEventArgs e)
        {
            FileOpenPicker picker = new FileOpenPicker();
            picker.FileTypeFilter.Add(".mp3");
            file = await picker.PickSingleFileAsync();
            mediaplayer.SetSource((await file.OpenAsync(FileAccessMode.Read)), "mp3");
        }

        void PlayButton_Click(object sender, RoutedEventArgs e)
        {
            MediaControl.TrackName = file.Name;
            BitmapImage bi=new BitmapImage();
            bi.UriSource=MediaControl.AlbumArt;
            AlbumArtImage.Source = bi;
            mediaplayer.Play();
        }

        void StopButton_Click(object sender, RoutedEventArgs e)
        {
            mediaplayer.Stop();
        }

        private async void MediaControl_StopPressed(object sender, object e)
        {
            sender = sender ?? new object();
            e = e ?? new object();

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => mediaplayer.Stop());
        }

        private async void MediaControl_PlayPauseTogglePressed(object sender, object e)
        {
            sender = sender ?? new object();
            e = e ?? new object();

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                try
                {
                    if (mediaplayer.CurrentState == MediaElementState.Stopped)
                        mediaplayer.Play();
                    else
                        mediaplayer.Stop();
                }
                catch
                {
                }
            });
        }

        private async void MediaControl_PausePressed(object sender, object e)
        {
            sender = sender ?? new object();
            e = e ?? new object();

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => mediaplayer.Stop());
        }

        private async void MediaControl_PlayPressed(object sender, object e)
        {
            sender = sender ?? new object();
            e = e ?? new object();

            await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => mediaplayer.Play());
        }
	}
}
